<!-- 
    1.在es6中类没有变量提升，所以必须先定义类，才能通过类实例化对象
    2.类里面的共有属性和方法一定要加this使用
 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <button>点击</button>
    <script>
        var that //全局变量，共用一个变量
        class Star {
            constructor(uname, age) {
                //1.constructor 里面的this 指向的的是 创建的实例对象
                that = this;
                this.uname = uname;
                this.age = age;
                // this.sing();  //在这里用this调用。，类里面共有属性和方法一定要加this使用
                this.btn = document.querySelector('button');
                this.btn.onclick = this.sing;
            }
            sing() {
                //2.这个sing方法里面this指向的是btn按钮，因为这个调用这个函数
                //  console.log(this.uname);  //btn里面没有uname所以会输出undefine
                console.log(that.uname); //把上面的指向实例对象赋值给that,此时that指向ldh这个实例对象
                //这里的that就是construct里面的this。

            }
            dance() {
                //3.这个dance里面的this指向的是实例对象，ldh，因为ldh调用了这个函数
                console.log(this);
            }
        }
        var ldh = new Star('刘德华');
        console.log(ldh);
    </script>
</body>

</html>
<!-- 
    总结：constructor里面this指向实例对象，方法里面的this指向这个方法的调用者
    如果是实例对象调用的这个方法，那么this就是指向实例对象

    如果是某个按钮(像上面一样)，this就是指向了这个按钮
 -->